import { defineStore, createPinia } from "pinia";
// uniapp 下 pinia 的本地数据缓存插件
import { createUnistorage } from '@/uni_modules/pinia-plugin-unistorage'
import piniaPersistConfig from "@/config/piniaPersist.js";

//  1.定义并导出容器 defineStore 调用后返回一个函数，调用该函数获得 Store 实体
export const GlobalStore = defineStore({
	// id: 必须的，在所有 Store 中唯一 将来Pinia会把所有的容器挂载到根容器，每个容器的名字就是这里的ID
	id: "GlobalState",
	/**
	 * state: 返回对象的函数
	 * 类似与组件的data， 用来存储全局状态
	 * 1.必须是函数：这样是为了在服务端渲染的时候避免交叉请求导致的数据状态污染（客户端其实无所谓）
	 * 2.必须是箭头函数：为了更好的ts类型推导
	 * 返回值：一个函数，调用该函数即可得到容器实例
	 */
	state: () => ({
		// element组件大小
		assemblySize: "default",
		//底部弹出层
		bomShow: false,
	}),

	/**
	 * 类似于组件的computed，用来封装计算属性，有【缓存】功能
	 * 如果不使用state而使用this，此时就不能对返回值类型做自动推导了，必须手动指定
	 */
	getters: {
	
	},

	/**
	 * 完全类比于Vue2组件中的methods（可以直接用this)，用来【封装业务逻辑】，修改state
	 */
	actions: {
		changebomShow() {
			this.bomShow = !this.bomShow
		}
	},
	// 给GlobalState模块开启持久化
	unistorage: piniaPersistConfig('GlobalState', false) // 开启后对 state 的数据读写都将持久化
});
// 创建pinia实例
const pinia = createPinia();
// // 挂载持久化
pinia.use(createUnistorage());
//声明实例 然后导出 仅需根目录这样 其它模块化无需这样
export default pinia;